package array;

import java.util.Arrays;

/**
 * 重新有序的数据，排序的基准值为自身的平方
 * @author liumingju
 * @date 2025/3/10 19:51
 */
public class 数组平方和 {
    public static void main(String[] args) {
        int[] arr = {-12, -1, -5, 6, 10, 12};
        //sort(arr);
        System.out.println(Arrays.toString(sort02(arr)));
    }

    /**
     * 普通排序比较条件变成平方即可
     * @param arr
     */
    public static void sort(int[] arr){
        for(int i = 1;i<arr.length;i++){
            for (int j = 0;j<arr.length-i;j++){
                if(arr[j]*arr[j]>arr[j+1]*arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }

    // 相向双指针法（数组正数部分平方后是有序的，负数部分平方后也是有序的）
    // 负数部分平方后是倒序，正数部分平方后是正序，所以使用相向双指针
    // 相当于合并两个有序数组
    public static int[] sort02(int[] arr){
        int left = 0;
        int right = arr.length-1;
        int res[] = new int[arr.length];
        int index = arr.length-1;
        while (left<=right){
            if(arr[left]*arr[left]>arr[right]*arr[right]){
                res[index--] = arr[left++];
            }else{
                res[index--] = arr[right--];
            }
        }
        return res;
    }
}
